<?php

$mcrp = './';
include('functions/session.php');
include('skin/default.php');

$SkinTitle = 'µContest - Interface';
	
include('skin/header.php');

?>

<div class="mc_box">
	<h3>Détails de l'interface (Version 1)</h3>
	<div class="mc_contest_view_text">
		<p>
		Pour valider une épreuve, vous devez récupérer les variables nécessaires à sa résolution, et renvoyer
		la ou les réponses au site. Cette page décrit l'interface et le protocole de communication avec le site.<br />
		Dans le cas où vous ne voulez pas vous soucier de l'interface avec le site, la <a href="download.php">
		bibliothèque µContest</a> est à votre disposition, disponible pour l'instant en C++.
		</p>
		
		<h3>Récupération des variables d'une épreuve</h3>
		<p>Première étape, vous devez vous connecter au site pour récupérer les variables. Pour cela, vous devez
		récupérer la page : http://www.microcontest.com/contests/i/contest.php, avec i l'ID de l'épreuve que vous
		voulez valider. Par exemple pour l'épreuve <a href="contest.php?id=4">Ave Caesar I</a> vous devez
		récupérer la page <a href="contests/4/contest.php">http://www.microcontest.com/contests/4/contest.php</a>.
		Dans ce cas vous pouvez par exemple obtenir :<br /><br />
		<code>
		Nombre_variables=2<br />
		[txt_crypte]<br />
		Longueur=50<br />
		Valeur=QMLYRCJGCPBSAFCKGLBCDCPEGDJYLRQMLAFCDAFYQQCBCJGJJC<br />
		[key]<br />
		Valeur=24<br />
		</code>
		<br />
		Toutes les pages d'épreuves sont formatées de la même manière :<br />
		- Une première ligne : <code>Nombre_variables=x</code> avec x le nombre de variables contenues
		dans la page.<br />
		- Une énumération des variabes fournies, commençant par le nom de la variable entre crochets. Les lignes suivantes sont :<br />
		<ul> 
			<li>La longueur de la donnée proprement dite à la ligne suivante, précédée de <code>Longueur=</code>, paramètre qui est optionnel, mais indispensable lorsque la donnée contient des caractères nuls.</li>
			<li>La donnée de la variable, précédée de <code>Valeur=</code>.</li>
		</ul>
		
		Enfin, chaque ligne se termine par un &#60;br/&#62; (sans espace), ce qui ne sera plus le cas dans la prochaine version
		de l'interface.<br /></p>
		<br />
		<b><u>Important</u></b>
		<p>Il ne suffit pas de récupérer simplement cette page pour pouvoir résoudre l'épreuve. Il faut également passer
		en <b>paramètres POST</b> ces informations :
		<ul>
			<li><code>username</code> : Votre nom d'utilisateur</li>
			<li><code>password</code> : Votre mot de passe, hashé en SHA1</li>
			<li><code>ID</code> : l'ID de l'épreuve</li>
			<li><code>contestlogin</code> : Une variable à laquelle vous devez donner la valeur 1</li>
		</ul>
		<br />
		Le site vous renverra dans l'en-tête de la page générée deux cookies : un 'PHPSESSID' et un '60gp' que vous devez utiliser par la suite
		pour envoyer votre réponse, sans quoi elle sera ignorée.
		</p>
		
		<b><u>Erreur possible</u></b>
		<p>
		Dans le cas où votre username/password est erroné, la page générée contient alors simplement "Erreur Auth". De plus,
		cette erreur sera générée si vous bruteforcez le site (deux tentatives en moins d'une minute).
		</p><br />
		<h3>Envoi de votre réponse au site</h3>
		<p>
		Une fois que vous avez traité les données fournies par le site et résolu l'épreuve, vous devez renvoyer cette réponse
		au site. Pour cela, il faut faire une requête POST à la page : http://www.microcontest.com/contests/i/validation.php, 
		avec i l'ID de l'épreuve que vous voulez valider. Les variables retournées au site sont passées en paramètres,
		paramètres portant le même nom que les variables. Aucune données supplémentaires ne sont requises, en dehors des
		paramètres de connexion (Cookie 60gp ET PHPSESSID) fournis par la page contest.php, il ne faut donc pas
		renvoyer votre pseudo et mot de passe.<br />
		Dans l'exemple précédent, on devrait donc renvoyer à la page http://www.microcontest.com/contests/4/validation.php le
		paramètre suivant : 
		<ul>
			<li><code>txt_clair</code></li>
		</ul>
		La page alors générée et retournée par le site contient simplement un entier pouvant prendre différentes valeurs :
		<ul>
			<li>Un entier strictement positif : C'est le nombre de points que vous avez gagnés, ce qui signifie que vous
			avez résolu l'épreuve</li>
			<li>0 : Vous avez échoué. Vous devez recommencer la procédure depuis le début.</li>
		</ul>
		</p>
		<br />
		<h3>Exemple</h3>
		<p>
		<a href="download/dialog.txt">Cette page</a> contient un exemple de communication entre un programme destiné à
		résoudre l'épreuve <a href="contest.php?id=1">Somme de deux entiers</a> et le site. Il y a 4 paquets : connexion
		à contest.php, renvoi des données par le site, envoi de la réponse à validation.php, réponse du site.
		</p>
	</div>
</div>	

<?php

include('skin/footer.php');

?>